<?php
// +-----------------------------------------------------------------------+
// |                                                                       |
// | WebFormsQA     (Question - Answer)                                    |
// | Copyright  (C) 2010                                                   |
// | Official site  www.scale-tech.ru                                      |
// | email          scale-tech@mail.ru                                     |
// | autor          Alexander Demachev                                     |
// |                                                                       |
// | This program is free software; you can redistribute it and/or modify  |
// | it under the terms of the GNU General Public License as published by  |
// | the Free Software Foundation; version 2 of the License.               |
// |                                                                       |
// | This program is distributed in the hope that it will be useful,       |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of        |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |
// | GNU General Public License for more details.                          |
// +-----------------------------------------------------------------------+

/*!
 * @page GiveQuestionPagePage Исходный код класса GiveQuestionPage
 * @include give_question_page.class.php
 */

/*! @addtogroup ClassWebFormsQA Основные классы проекта
 *  Группа включает основные классы используемые в проекте WebFormsQA
 *  @{
 */


/**
 * @class GiveQuestionPage 
 * @brief страница для задания вопроса пользователем \n
 * @ref GiveQuestionPagePage
 */
class GiveQuestionPage extends Page {

    /**
     *  конструктор.
     *  @param object &$smarty_obj   - ссылка на обьект шаблона
     *  @param array  $attr          - массив атрибутов в формате attr["name"] = name_type;
     *  @param string $name_template - название шаблона
     */
    function GiveQuestionPage(&$smarty_obj, $attr, $name_template)
    {
        parent::Page(&$smarty_obj, $attr, $name_template);
    }

    /** 
     * @brief обновить данные страницы
     *
     *    	Состояния страницы:
     * - 0    -   начальное состояние 
     * - 1    -   не выбрана не одна из категорий
     * - 2    -   Вопрос задан (кнопка Послать) - проверка есть ли уже похожий вопрос в базе,
     *            в случае наличия вывести на экран предупреждение пользователю.
     * - 3    -   вопрос задан правильно, но не задан код подтверждения.
     * - 4    -   Очистка формы ( Используется Java Script )
     * - 5    -   категория выбрана, появляется сообщение "Вы хотите задать вопрос в категории ..."
     * - 6    -   вопрос пустой
     * - 7    -   вопрос задан правильно, код подтвержден, добавить в базу.
     * 
     * @return bool результат операции
     */
    function update()
    {

        // обновляем атрибуты страницы и их значени
        // и главный шаблон Smarty
        if( $flag_result = parent::update() ) {

            $base   = &$GLOBALS['base'];
            $nav    = new Navigation($base);

            $state      = 0;
            $email      = "";
            $question   = "";
            $current_category = "";
            $name_image = "";
            $categoryID = 0;
            $flag_gen_image = false;
		    $old_question = "";
            

            // дерево категорий
            $categories_tree = array();

            if( AuthCommon::getAttrCategoryIDandSession($this, $categoryID) ) {
                $state = 5;
                $email = AuthCommon::checkEmail();

                // категория выбрана, можем добавить вопрос
                if ($this->attr["question"]["set"]) {
					$state = 6;
					
                    if ($this->attr["email"]["set"]) $email = $this->attr["email"]["value"];

                    // значение строки для обратной связи, вдруг вопрос уже есть
                    // удаляем пробелы из начала строки
                    $old_question = $this->attr["question"]["value"];
                    $question = trim($this->attr["question"]["value"]);
                    if( mb_strlen($question, "utf-8") ) {
                        // вопрос не пустой
                        $id    = 0;
						$state = 3;
                    }
                }

		
				if( $state == 5 || $state == 6 ) $flag_gen_image = true; 
				else if( $state == 3 ) {
					$flag_gen_image = true;
					if ($this->attr["image_code"]["set"] && $this->attr["image_code"]["value"] ) {
						if( AuthCommon::checkAntySpam($this->attr["image_code"]["value"]) ) {
							$state = 7;
							$flag_gen_image = false;

							if( !$base->addQuestion($categoryID, $question, $email, $id) ) $state = 2;

						}
					}
				}
			
            } else {
				// ничего не выбрано, отображаем корневые категории
				if( $categoryID == 0 ) $state = 1;
				else {
					$state = 5;
					$flag_gen_image = true;
				}

            }

			if( $flag_gen_image ) {
				$image_code = AuthCommon::genAntySpam();
				$name_image = AuthCommon::getNameFile();
			}


            // получаем дерево категорий
            $nav->getTreeCategories($categoryID, CATEGORIES_TABLE, $categories_tree);
            
            if( $state == 5 || $state == 6 ) {
            	// ищу имя текущей категории 
            	for ($i = 0; $i <= count($categories_tree); $i++) {
            		if( $categoryID == $categories_tree["$i"][0] ) {
            			$current_category = $categories_tree["$i"][1];
            			break;		
            		} 
            	}
            }

            $this->Smarty->assign("state", $state);
            $this->Smarty->assign("current_category", $current_category);
            $this->Smarty->assign("current_tabs", ID_PAGE_GIVE_QUESTION);
            // строка с главным параметром перехода на страницу - первый ключ в списке конструктора MainPage
            reset($this->attr);
            $this->Smarty->assign("code_page", "index.php?".key($this->attr));
            $this->Smarty->assign("categoryID", $categoryID);

            // поля для обратной связи
            $this->Smarty->assign("email", $email);
            $this->Smarty->assign("old_question", $old_question);

            $this->Smarty->assign("name_image", $name_image);
            $this->Smarty->assign("categories_tree", $categories_tree);

        }
        
        return $flag_result;

    } // end update()

}  // finish class GiveQuestionPage

/*! @} */

?>
